#ifndef OCK_MEMORY_BRIDGE_OCK_ACLADAPTER_OCK_MEMORY_COPY_PARAM_H
#define OCK_MEMORY_BRIDGE_OCK_ACLADAPTER_OCK_MEMORY_COPY_PARAM_H
#include <ostream>
#include "ock/acladapter/data/OckMemoryCopyKind.h"
#include "ock/acladapter/executor/OckAsyncTaskBase.h"

namespace ock {
namespace acladapter {

class OckMemoryCopyParam : public OckAsyncTaskParamBase
{

public:
    OckMemoryCopyParam(void *dst, size_t destMax, const void *src, size_t count, OckMemoryCopyKind kind);
    virtual ~OckMemoryCopyParam() noexcept = default;
    void *DestAddr(void);
    const void *DestAddr(void) const;
    size_t DestMax(void) const;
    const void *SrcAddr(void) const;
    size_t SrcCount(void) const;
    OckMemoryCopyKind kind(void) const; 
private:
    void *dst;
    size_t destMax;
    const void *src;
    size_t count;
    OckMemoryCopyKind kind;
};

std::ostream &operator<<(std::ostream &os, const OckMemoryCopyParam &param);

}
}
#endif